/**
 * 1. 定义Bomb构造函数（模拟炸弹对象）
 * 核心：使用setTimeout（一次性定时器）和clearTimeout（取消定时器）
 */
function Bomb() {
  this.timerId = null; // 用于存储定时器ID，以便后续取消
}

/**
 * 2. 定义start方法：启动定时器（3秒后"爆炸"）
 */
Bomb.prototype.start = function () {
  // 保存this指向（避免setTimeout回调中this丢失）
  const self = this;

  // 启动3秒定时器（3000毫秒）
  this.timerId = setTimeout(() => {
    console.log(`💥 [${new Date().toLocaleTimeString()}] 炸弹爆炸！`);
  }, 3000);

  console.log(`⏰ [${new Date().toLocaleTimeString()}] 炸弹已启动,3秒后爆炸(定时器ID:${this.timerId})`);
};

/**
 * 3. 定义clear方法：取消定时器（阻止"爆炸"）
 */
Bomb.prototype.clear = function () {
  // 判断定时器是否存在（避免重复取消）
  if (this.timerId) {
    clearTimeout(this.timerId); // 取消定时器
    console.log(`🛑 [${new Date().toLocaleTimeString()}] 炸弹已拆除(已取消定时器ID:${this.timerId})`);
    this.timerId = null; // 重置timerId，避免重复操作
  } else {
    console.log(`⚠️ [${new Date().toLocaleTimeString()}] 炸弹未启动，无需拆除`);
  }
};

// 4. 实例化两个炸弹对象
const b1 = new Bomb();
const b2 = new Bomb();

console.log('=== 炸弹模拟程序 ===');
console.log('当前时间：', new Date().toLocaleTimeString());
console.log('------------------------');

// 5. 启动两个炸弹
b1.start();
b2.start();

// 6. 1秒后取消b2的定时器（阻止b2爆炸）
setTimeout(() => {
  b2.clear();
}, 1000);

// 额外说明：程序会在3秒后自动退出（因为所有定时器执行完毕，Node.js事件循环为空）